/**
 * 将对象转换为查询字符串
 * @param {Object} obj 要转换的对象
 * @returns {String} 查询字符串
 */
function obj2str(obj) {
  return Object.keys(obj || {})
    .map(key => `${encodeURIComponent(key)}=${obj[key]}`)
    .join('&');
}

/**
 * 页面跳转
 * @param {String} url 要跳转的页面路径
 * @param {Object} query 要传递的参数
 */
function navigateTo({ url, query }) {
  wx.navigateTo({
    url: `${url}?${obj2str(query)}`,
  });
}

/**
 * 重定向到一个新页面
 * @param {String} url 要跳转的页面路径
 * @param {Object} query 要传递的参数
 */
function redirectTo({ url, query }) {
  wx.redirectTo({
    url: `${url}?${obj2str(query)}`,
  });
}

/**
 * 切换到 tabBar 页面，并关闭其他所有非 tabBar 页面
 * @param {String} url 要切换的 tabBar 页面路径
 */
function switchTab(url) {
  wx.switchTab({
    url,
  });
}

/**
 * 关闭当前页面，返回上一页面或多级页面
 * @param {Number} delta 返回的页面数，如果 delta 大于现有页面数，则返回到首页
 */
function navigateBack(delta = 1) {
  wx.navigateBack({
    delta,
  });
}


const router = {
  navigateTo,
  redirectTo,
  switchTab,
  navigateBack
};
export {
  router
};